
//#include "PageMap.hpp"
//
//int main()
//{
//	TCMalloc_PageMap1<Span, 32 - PAGE_SHIFT > _idSpanMap;
//
//	Span span;
//	_idSpanMap.set(222, &span);
//	_idSpanMap.set(2232, &span);
//	_idSpanMap.set(22312, &span);
//}

//#include <iostream>
//#include <vector>
//#include <ctime>
//
//#include "ConcurrentAlloc.h"
//using std::cout;
//using std::cin;
//using std::endl;
//
//void Alloc1()
//{
//	void* p1 = ConcurrentAlloc(7000000000);
//	void* p2 = ConcurrentAlloc(1000);
//	void* p3 = ConcurrentAlloc(200);
//	void* p4 = ConcurrentAlloc(400);
//	void* p5 = ConcurrentAlloc(2);
//	void* p6 = ConcurrentAlloc(700);
//	void* p7 = ConcurrentAlloc(50);
//	void* p8 = ConcurrentAlloc(6);
//	void* p9 = ConcurrentAlloc(80);
//	void* p10 = ConcurrentAlloc(10);
//
//	ConcurrentFree(p1);
//	ConcurrentFree(p2);
//	ConcurrentFree(p3);
//	ConcurrentFree(p4);
//	ConcurrentFree(p5);
//	ConcurrentFree(p6);
//	ConcurrentFree(p7);
//	ConcurrentFree(p8);
//	ConcurrentFree(p9);
//	ConcurrentFree(p10);
//}
//
//void Alloc2()
//{
//	void* p1 = ConcurrentAlloc(7);
//	void* p2 = ConcurrentAlloc(1);
//	void* p3 = ConcurrentAlloc(2);
//	void* p4 = ConcurrentAlloc(4);
//	void* p5 = ConcurrentAlloc(2);
//	void* p6 = ConcurrentAlloc(7);
//	void* p7 = ConcurrentAlloc(5);
//	void* p8 = ConcurrentAlloc(6);
//	void* p9 = ConcurrentAlloc(8);
//	void* p10 = ConcurrentAlloc(10);
//
//	ConcurrentFree(p1);
//	ConcurrentFree(p2);
//	ConcurrentFree(p3);
//	ConcurrentFree(p4);
//	ConcurrentFree(p5);
//	ConcurrentFree(p6);
//	ConcurrentFree(p7);
//	ConcurrentFree(p8);
//	ConcurrentFree(p9);
//	ConcurrentFree(p10);
//}
//
//void TLSTest()
//{
//	std::thread t1(Alloc1);
//	std::thread t2(Alloc2);
//	std::thread t3(Alloc2);
//	std::thread t4(Alloc2);
//	std::thread t5(Alloc2);
//	std::thread t6(Alloc2);
//	std::thread t7(Alloc2);
//	std::thread t8(Alloc2);
//	std::thread t9(Alloc2);
//	std::thread t10(Alloc2);
//	std::thread t11(Alloc2);
//	std::thread t12(Alloc2);
//
//	t1.join();
//	t2.join();
//	t3.join();
//	t4.join();
//	t5.join();
//	t6.join();
//	t7.join();
//	t8.join();
//	t9.join();
//	t10.join();
//	t11.join();
//	t12.join();
//}
//
//
//
//void Alloc3()
//{
//	void* p1 = ConcurrentAlloc(1024 * 8 * 129);
//	ConcurrentFree(p1);
//}
//
//void BigMemoryTest()
//{
//	Alloc3();
//}
//
//int main()
//{
//	TLSTest();
//	BigMemoryTest();
//
//	//int * ptr = (int*)VirtualAlloc(0,  1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); 
//	//
//	//*ptr = 798798798;
//
//
//	//cout << sizeof ptr << "    " << *ptr;
//
//
//	//std::unordered_map<int, int> hash;
//	//hash.insert({ 1, 1 });
//	//hash.insert({ 1, 2 });            // 注意 insert 和 emplace 插入时不修改原有元素
//
//	//cout << hash[1];
//}
//
//
//
//
//
////class TreeNode
////{
////    int a, b, c;
////    long long cc;
////};
//
////void Test()
////{
////    size_t round = 500, N = 1000000;
////    ObjectPool<TreeNode> pool;
////
////    std::vector<TreeNode*> ret;
////
////    ret.reserve(N);   // 为容器预分配内存，但不会改变容器内的元素个数 ；resize 会增多减少容器的元素个数
////
////    size_t begin1 = clock();
////
////    for (size_t j = 0; j < 5; j++)
////    {
////        for (int i = 0; i < N; i++)
////        {
////            ret.push_back(pool.New());
////        }
////        for (int i = 0; i < N; i++)
////        {
////            pool.Delete(ret[i]);
////        }
////
////    }
////    size_t end1 = clock();
////
////
////
////    size_t begin2 = clock();
////
////    for (size_t j = 0; j < 5; j++)
////    {
////        for (int i = 0; i < N; i++)
////        {
////            ret[i] = new TreeNode();
////        }
////        for (int i = 0; i < N; i++)
////        {
////            delete ret[i];
////        }
////
////    }
////    size_t end2 = clock();
////
////
////    cout << "pool.New(): " << end1 - begin1 << endl;
////    cout << "new : " << end2 - begin2 << endl;
////}
////
////int main()
////{
////    Test();
////}
//
//// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
//// 调试程序: F5 或调试 >“开始调试”菜单
//
//// 入门使用技巧: 
////   1. 使用解决方案资源管理器窗口添加/管理文件
////   2. 使用团队资源管理器窗口连接到源代码管理
////   3. 使用输出窗口查看生成输出和其他消息
////   4. 使用错误列表窗口查看错误
////   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
////   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
